package array_string_try;


public class StringLearnInQuestion {

    /*
    给你两个字符串 word1 和 word2 。请你从 word1 开始，通过交替添加字母来合并字符串。
    如果一个字符串比另一个字符串长，就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串 。
    */
    public String mergeAlternately(String word1, String word2) {
        int i = 0;
        StringBuilder ret = new StringBuilder();
        int len1 = word1.length();
        int len2 = word2.length();

        while (i < len1 && i < len2) {
            ret.append(word1.charAt(i));
            ret.append(word2.charAt(i));
            i++;
        }

        if (i >= len1 && i < len2) {
            ret.append(word2.substring(i));
        }

        if (i < len1) {
            ret.append(word1.substring(i));
        }

        return ret.toString();
    }


    /*
    字符串的最大公因子:对于字符串 s 和 t，只有在 s = t + t + t + ... + t + t（t 自身连接 1 次或多次）时，我们才认定 “t 能除尽 s”。
    给定两个字符串 str1 和 str2 。返回 最长字符串 x，要求满足 x 能除尽 str1 且 x 能除尽 str2 。
    */
    public String gcdOfStrings(String str1, String str2) {
        int len1 = str1.length();
        int len2 = str2.length();

        for(int i = Math.min(len1,len2);i>0;i--){
            if(len1%i ==0 && len2%i ==0 && str1.substring(0,i).equals(str2.substring(0,i))){
                if(check(str1.substring(0,i),str1) && check(str2.substring(0,i),str2)){
                    return str1.substring(0,i);
                }
            }
        }
        return "";
    }
    public boolean check(String sub, String str){
        int i = str.length()/sub.length();
        StringBuilder temp = new StringBuilder();
        while(i>0){
            temp.append(sub);
            i--;
        }
        return temp.toString().equals(str);
    }


    /*
    给你一个字符串 s ，请你反转字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
    返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意：输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。
    返回的结果字符串中，单词间应当仅用单个空格分隔，且不包含任何额外的空格。
    */
    public static String reverseWords(String s) {
        String[] parts = s.trim().split("\\s+");
        StringBuilder ret = new StringBuilder();
        for(int i=parts.length-1;i>=0;i--){
            ret.append(parts[i]);
            if(i>0){
                ret.append(' ');
            }
        }
        return ret.toString();
    }

    public String reverseWords2(String s) {
        String s1 = s.trim();
        StringBuilder sub = new StringBuilder();
        StringBuilder str = new StringBuilder();
        int i=0;
        while(i<s1.length()){
            if(s1.charAt(i)!=' '){
                sub.append(s1.charAt(i++));
            }else{
                if(!sub.isEmpty()){
                    str.insert(0,sub);
                    str.insert(0,' ');
                    sub.setLength(0);
                }
                i++;
            }
        }
        str.insert(0,sub);
        return str.toString();
    }

    public static void swap(StringBuilder str, int i, int j){
        char temp = str.charAt(i);
        str.setCharAt(i, str.charAt(j));
        str.setCharAt(j, temp);
    }

    public static void main(String[] args) {
        //String
        String str1 = "to welcome to the to house";
        StringBuilder s = new StringBuilder(str1);
        str1 += "as";
        System.out.println(str1);
        System.out.println(str1.replace("to", "into"));
        System.out.println(str1);
        System.out.println(str1.indexOf("use"));
        System.out.println(str1.concat(" monday"));
        System.out.println(str1);
        System.out.println(str1.compareTo("sorry"));
        System.out.println(str1.startsWith("house",22));
        int[] arr = {1,2,3,4,5,6};
        System.out.println(arr.length);
        System.out.println(reverseWords("a good   example"));

        swap(s,0,1);
        System.out.println(s);
    }
}
